package com.sc.nft.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sc.nft.entity.CopyrightAuctionRound;
import com.sc.nft.entity.UserInfo;
import com.sc.nft.entity.dto.*;
import com.sc.nft.entity.vo.*;

import java.util.List;

/**
 * <p>
 * 版权拍卖商品 服务类
 * </p>
 *
 * @author liGen
 * @since 2024-09-12
 */
public interface CopyrightAuctionService {

    /**
     * 版权藏品拍卖里列表接口
     * @param name
     * @param mp
     * @return
     */
    IPage<CopyrightAuctionAdminPageVO> collectionPage(String name, Page mp);

    /**
     * 版权藏品拍卖添加接口
     * @param copyrightAuctionAdminDTO
     */
    void collectionAdd(CopyrightAuctionAdminDTO copyrightAuctionAdminDTO);

    /**
     * 拍卖配置修改
     * @param configAdminDTO
     */
    void configSave(CopyrightAuctionConfigAdminDTO configAdminDTO);

    /**
     * 拍卖配置详情
     * @param id
     * @return
     */
    CopyrightAuctionConfigAdminVO configDetail();

    /**
     * 版权藏品拍卖按钮
     * @param copyrightAuctionAdminDTO
     */
    void collectionUpdateStatus(CopyrightAuctionUpdateStatusAdminDTO copyrightAuctionAdminDTO);

    /**
     * 报名竞拍活动获取信息
     * @param user
     * @param userCollectionId
     * @return
     */
    CopyrightAuctionRegistrationDetailsVO registrationDetails(UserInfo user, Long userCollectionId);


    /**
     * 报名活动或修改起拍价
     * @param user
     * @param registrationDTO
     * @return
     */
    void registration(UserInfo user, CopyrightAuctionRegistrationDTO registrationDTO);

    /**
     * 市场版权商品
     * @param pageNo
     * @param pageSize
     * @return
     */
    IPage<CopyrightMarketAuctionDTO> market(Integer pageNo, Integer pageSize);

    /**
     * 市场版权拍卖商品详情
     * @param id
     * @param user
     * @return
     */
    CopyrightMarketAuctionDetailsVO marketDetails(Long id, UserInfo user);

    /**
     * 市场版权拍卖用户出价
     * @param auctionBidDTO
     * @param user
     */
    void marketBid(CopyrightMarketAuctionBidDTO auctionBidDTO, UserInfo user);

    /**
     * 结果公示
     * @param id
     * @return
     */
    List<CopyrightAuctionWinListVO> auctionWinList(Long id);

    /**
     * 搜索
     * @param name
     * @param
     * @return
     */
    IPage<CopyrightMarketAuctionDTO> marketSearch(String name,Integer pageNo, Integer pageSize);

    /**
     * 市场版权拍卖开启时间
     * @return
     */
    CopyrightAuctionOpenTimeVO marketOpenTime();

    /**
     * 本轮最高生成下一轮起拍价
     * @param currentRound 当前轮
     * @param nextRound 下一轮
     * @param num 数量
     * @param userId 用户id
     */
    void generateNextStartPrice(CopyrightAuctionRound currentRound, CopyrightAuctionRound nextRound, Integer num, Long userId,List<Long> userEquityPropsIdList);

    /**
     * 获取用户协议
     * @return
     */
    String auctionGetRule();

    /**
     * 用户是否同意协议
     * @param id
     */
    Boolean userAgreement(Long id);

    /**
     * 用户同意协议
     * @param id
     */
    void auctionUserAgreement(Long id);


    /**
     * 平台用户分成
     */
    void platformDividends();
}
